/***************************************************************************
 *   Copyright (C) 2007 by Ivan Vasić              *
 *   ivasic@gmail.com                  *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#include "log.h"
#include "logobserver.h"
		
#include <iostream>
		
#include <QtCore>
		
using namespace std;

Log::Log(QObject *parent)
		: QObject(parent)
{}


Log::~Log()
{}

void Log::logRichMessage(const QString & msg)
{
	QMutex m;
	QMutexLocker lock(&m);
	
	QString mesg = QDate::currentDate().toString() + " " + QTime::currentTime().toString() + ": " + msg;
	
	LogObserver* observer;
	foreach(observer, m_observers)
	{
		observer->writeMessage(mesg);
	}
}

void Log::logMessage(const char* msg)
{
	cout << msg << endl;
	logRichMessage(QString("Debug: %1").arg(msg));
}

void Log::registerObserver(LogObserver * observer)
{
	m_observers.append(observer);
}

void Log::unregisterObserver(LogObserver * observer)
{
	m_observers.removeAll(observer);
}
